﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using DAL;
using System.Data;
using System.IO;
using System.Configuration;
using System.Transactions;
using System.Data.Linq;
using System.ComponentModel;
using UtilityExtensions;

namespace BOL.Banco
{
    public class GetCuentaBancoList
    {
        int _count;



        public int Count(int idEmpresa,
                         string bancoStr,
                         string cuentaStr,
                         int startRowIndex,
                         int maximumRows,
                         string sortExpression)
        {
            return _count;
        }



        private IQueryable<CuentaBancoListInfo> ApplySelect_CuentaBancoInfo()
        {
            var q = from a in DbUtil.Db.CuentaBancos
                    select new CuentaBancoListInfo
                    {
                        bancoStr=a.Banco.descripcion,
                        descripcion=a.descripcion,
                        idInternal=a.idInternal,
                        monedaStr=a.Moneda.descripcion,
                        idBanco=a.idBanco,
                        idEmpresa=a.idEmpresa
                        
                    };
            return q;
        }
        private IQueryable<CuentaBancoListInfo> ApplySort(IQueryable<CuentaBancoListInfo> q, string sortExpression)
        {
            switch (sortExpression)
            {
                case "monedaStr":
                    q = q.OrderBy(b => b.monedaStr);
                    break;
                case "monedaStr DESC":
                    q = q.OrderByDescending(b => b.monedaStr);
                    break;

                case "descripcion":
                    q = q.OrderBy(b => b.descripcion);
                    break;
                case "descripcion DESC":
                    q = q.OrderByDescending(b => b.descripcion);
                    break;

                case "bancoStr":
                    q = q.OrderBy(b => b.bancoStr);
                    break;
                case "bancoStr DESC":
                    q = q.OrderByDescending(b => b.bancoStr);
                    break;

               
                default:
                    q = q.OrderByDescending(b => b.bancoStr).OrderByDescending(p => p.descripcion);
                    break;
            }
            return q;
        }



        [DataObjectMethod(DataObjectMethodType.Select, false)]
        public IEnumerable<CuentaBancoListInfo> Execute(int idEmpresa,string bancoStr,
                                         string cuentaStr,
                                         int startRowIndex,
                                         int maximumRows,
                                         string sortExpression)
        {
            if (!cuentaStr.HasValue())
                cuentaStr = "";

            var q = ApplySelect_CuentaBancoInfo();

            

            q = q.Where(a =>
                              (a.descripcion).Contains(cuentaStr)
                              & (bancoStr == "0" ? a.idBanco != 0 : a.idBanco == Convert.ToInt32(bancoStr))
                             & (idEmpresa == 0?  a.idEmpresa!= 0: a.idEmpresa==idEmpresa)
                            );




            _count = q.Count();

            q = ApplySort(q, sortExpression);
            return q.Skip(startRowIndex).Take(maximumRows);
        }




    }
}
